package cn.itcast.login.action;

import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.ServletActionContext;

import cn.itcast.core.constant.Constant;
import cn.itcast.nsfw.user.entity.User;
import cn.itcast.nsfw.user.service.UserService;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

	private User user;
	private String loginResult;

	@Resource
	private UserService userService;

	// 跳转到登录页面
	public String toLoginUI() {
		return "loginUI";
	}

	// 登录
	public String login() {
		// 1、获取帐号和密码
		if (user != null) {
			if (StringUtils.isNotBlank(user.getAccount()) && StringUtils.isNoneBlank(user.getPassword())) {
				// 2、登录
				// 2.1、根据用户的帐号和密码到数据库中的用户表查询用户列表
				List<User> list = userService.findUsersByAccountAndPass(user.getAccount(), user.getPassword());
				if (list != null && list.size() > 0) {// 登录成功
					user = list.get(0);
					// 2.2、查询用户的所有用户角色
					user.setUserRoles(userService.getUserRolesByUserId(user.getId()));
					// 2.2、将用户对象保存到session中
					ServletActionContext.getRequest().getSession().setAttribute(Constant.USER, user);
					// 2.3、把当前登录用户记录到日志文件
					Log log = LogFactory.getLog(getClass());
					log.info("用户名称为：" + user.getName() + "；登录了系统。");
					// 2.4、跳转到系统首页（重定向跳转）
					return "home";
				} else {
					loginResult = "登录失败。帐号或密码错误！";
				}
			} else {
				loginResult = "帐号或密码不能为空！";
			}
		} else {
			loginResult = "帐号和密码不能为空！";
		}
		return toLoginUI();
	}

	// 注销、退出
	public String logout() {
		//清除session中保存的用户信息；跳转到登录页面
		ServletActionContext.getRequest().getSession().removeAttribute(Constant.USER);
		return toLoginUI();
	}
	// 跳转到没有权限提示页面
	public String toNoPermissionUI() {
		return "noPermissionUI";
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public String getLoginResult() {
		return loginResult;
	}

	public void setLoginResult(String loginResult) {
		this.loginResult = loginResult;
	}

}
